#ifndef __MATRIZ_H
#define __MATRIZ_H

/**
@brief Matriz de enteros que servirá para almacenar los datos del acumulador y las piezas
*/ 
class Matriz {
	private:	
		/**
		@brief Numero de filas de la matriz
		*/		
		int f; 
		/**
		@brief Numero de columnas de la matriz
		*/
		int c; 
		/**
		@brief Vector que guardará los datos de la matriz		
		*/		
		int *datos; 
		
	
	public:
		/**
    		@brief Constructor por defecto
   		*/
		Matriz();
		/**
     		@brief Constructor de copia
   		*/
		Matriz(const Matriz& m);
		/**
     		@brief Constructor por valor
     		@param f Numero de filas de la matriz
     		@param c Numero de columnas de la matriz
     		@pre f mayor que 0
     		@pre c mayor qued 0
   		*/
		Matriz (int f, int c); 
		/**
     		@brief Devuelve el número de filas
    		@return Número total de filas
   		*/
		int FilasMatriz ()const;        
		/**
     		@brief Devuelve el número de columnas
    		@return Número total de columnas
   		*/
		int ColumnasMatriz ()const; 
		/**
    		@brief Modifica una posición de la matriz
     		@param i Fila de la matriz que se desea modificar
		@param j Columna de la matriz que se desea modificar
     		@param v Valor que se inserta en la posición indicada
     		@pre i mayor o igual que 0 y menor que filas
     		@pre j mayor o igual que 0 y menor que columnas
   		*/ 
		void SetMatriz(int i, int j, int v);  
		/**
    		@brief Devuelve una posición de la matriz
     		@param i Fila de la matriz que se desea devolver
		@param j Columna de la matriz que se desea devolver
     		@pre i mayor o igual que 0 y menor que filas
     		@pre j mayor o igual que 0 y menor que columnas
   		*/ 
		int GetMatriz (int i, int j)const;
		
		/**
     		@brief Operador de asignación
   		*/
		Matriz& operator=(const Matriz &m);
		/**
     		@brief Destructor
   		*/
		~Matriz ();                   

};

#endif

